#ifndef SYNC_H_
#define SYNC_H_

#include "AutoLock.hh"
#include "Mutex.hh"

//
/**
 * \file Sync.hh
 * \author  jsk <jsk.jinsubkim@gmail.com>
 * \version 1.0
 *
 * \class Sync Sync.hh
 *
 * 
 */
template <class T>
class Sync
{
public:
	
	/**
	 * \name write
	 * \param InputVal 입력 값.
	 * 
	 * 
	 * 
	 * \return 
	 * 
	 * 성공할 경우 RETURN_OK, 
	 * 실패할 경우 RETURN_OK가 아닌 값.
	 */
	virtual ResultOf write(T InputVal);
	
	/**
	 * \name read
	 * 
	 * 
	 * 
	 * \return 
	 * 
	 * write 메소드를 통해서 전달 받은 값.
	 */
	virtual T read();
	
	/**
	 * \name check
	 * \param CompVal 비교 값.
	 * 
	 * 
	 * 
	 * \return 
	 * 
	 * 같으면 0, 크면 양수, 작으면 음수.
	 */
	virtual Number check(T CompVal);
	
// Member
protected:
	/**
	 * ???
	 * 
	 * \note
	 * 
	 * 귀찮아서 그냥 씀.
	 */
	Mutex Key;
	
	/**
	 * ???
	 */
	T Value;
};

#endif //SYNC_H_